﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace DocTes.Jerarquias
{
	/// <summary>
	/// DataSource creado para implementar entidades Linq con un TreeView
	/// </summary>
    public class JerarquiaCarpetaDataSource : HierarchicalDataSourceControl, IHierarchicalDataSource
	{
		private  IEntidadLinqJerarquiaCarpeta _entidadJerarquiaCarpeta = null;
		
		/// <summary>
		/// Propiedad de inicialización del DataSource es el nodo raiz
		/// </summary>
		public IEntidadLinqJerarquiaCarpeta EntidadJerarquiaCarpeta
		{
			get
			{
				return _entidadJerarquiaCarpeta;
			}
			set
			{
				_entidadJerarquiaCarpeta = value;
			}
		}
		
		/// <summary>
		/// Constructor único
		/// </summary>
		public JerarquiaCarpetaDataSource() : base() { }
		
		/// <summary>
		/// Override del método getHierarchicalView para obtener los hijos a traves de un path
		/// </summary>
		/// <param name="viewPath">path predeterminada del objeto IHierarchyData</param>
		/// <returns></returns>
		protected override HierarchicalDataSourceView GetHierarchicalView(string viewPath)
		{
			//Se ignora el path de entrada
			
			//se construyen las fabricas necesarias para el DataSourceView
			FabricaJerarquiaHierarchicalEnumerable fabricaJerarquiaEnumerable = new FabricaJerarquiaHierarchicalEnumerable();
			FabricaHierarchyData fabricaJierarchydata = new FabricaHierarchyData();

			//se construye el DataSourceView

			JerarquiaCarpetaDataSourceView dataSourceView = new JerarquiaCarpetaDataSourceView(_entidadJerarquiaCarpeta,
																															fabricaJerarquiaEnumerable,
																															fabricaJierarchydata);

			return dataSourceView;
		}
		
		/// <summary>
		/// Override del método de createControlCollection
		/// </summary>
		/// <returns></returns>
		protected override ControlCollection CreateControlCollection()
		{
			return new ControlCollection(this);
		}
	}
}
